package br.com.mtech.ctrlliberty.web.mb;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ValueChangeEvent;

import br.com.mtech.ctrlliberty.clientjar.ejb.AlertaEJBRemote;
import br.com.mtech.ctrlliberty.clientjar.ejb.PesquisaEJBRemote;
import br.com.mtech.ctrlliberty.clientjar.entity.AlertaVO;
import br.com.mtech.ctrlliberty.clientjar.entity.TelefoneVO;
import br.com.mtech.ctrlliberty.clientjar.entity.TipoAlertaEnum;
import br.com.mtech.ctrlliberty.clientjar.entity.TipoLimiteEnum;
import br.com.mtech.ctrlliberty.clientjar.entity.UsuarioVO;
import br.com.mtech.ctrlliberty.clientjar.exception.BusinessException;
import br.com.mtech.ctrlliberty.web.util.ManagedBeanUtil;
import br.com.mtech.ctrlliberty.web.util.UtilsNLS;

@ManagedBean(name="alertaBean")
@ViewScoped
public class AlertaBean implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -6674867725620763287L;

	private TelefoneVO telefone;	
	private AlertaVO alerta;	
	private Long idAlerta;
	private Long idTelefone;	
	private List<TelefoneVO> listaTelefone;
	private List<AlertaVO> listaAlerta;
	private TipoAlertaEnum tipoAlerta;
	
	@EJB 
	private PesquisaEJBRemote pesquisaEJB;
	
	@EJB 
	private AlertaEJBRemote alertaEJB;

	@PostConstruct
	public void inicializarPagina() {
		alerta = new AlertaVO();
		try {
			UsuarioVO usuarioLogado = ManagedBeanUtil.recuperarUsuarioLogado();
				
			if(usuarioLogado == null) {
				UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
					return;
			} else {
				listaTelefone = pesquisaEJB.listarTelefonesPorUsuario(usuarioLogado);
				listaAlerta = alertaEJB.pesquisarAlerta(listaTelefone.get(0));
			} 
			
		} catch (BusinessException e) {
			UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
		}
				
	}
	
	public void alterarTipoLimite() {
		TipoAlertaEnum tipo = alerta.getTipoAlerta();
		
		if (TipoAlertaEnum.LIGACAO.equals(tipo)) {
			alerta.setTipoLimite(TipoLimiteEnum.MINUTOS);
		} else if (TipoAlertaEnum.MENSAGEM.equals(tipo)) {
			alerta.setTipoLimite(TipoLimiteEnum.QUANTIDADE);
		} else if (TipoAlertaEnum.INTERNET.equals(tipo)) {
			alerta.setTipoLimite(TipoLimiteEnum.KB);
		} else {
			alerta.setTipoLimite(null);
		}
		
	}
	
	public void listarAlertas(ValueChangeEvent event) {
		
		for (TelefoneVO tel : listaTelefone) {
			if(tel.getId().equals((Long)event.getNewValue())) {
				try {
					listaAlerta = alertaEJB.pesquisarAlerta(telefone);
				} catch (BusinessException e) {
					UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
				}
				break;
			}
		}
	}
	
	public String telaCadastroAlerta() {
		
		return null;
	}
	
	public String cadastrarAlerta() {
		
		for (TelefoneVO tel : listaTelefone) {
			if(tel.getId().equals(idTelefone)){
				telefone = tel;
			}
		}
		try {
			
			alerta.setTelefone(telefone);
			alerta.setAlertaAcionado(false);
			alertaEJB.cadastrarAlerta(alerta);
		} catch (BusinessException e) {
			e.printStackTrace();
			UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
		}
		
		for (TelefoneVO tel : listaTelefone) {
			if(tel.getId().equals(idTelefone)) {
				try {
					listaAlerta = alertaEJB.pesquisarAlerta(telefone);
				} catch (BusinessException e) {
					UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
				}
				break;
			}
		}
		return "true";
	}
	
	public void removerAlerta() {
		listaAlerta.remove(alerta);
		if(alerta != null) {
			try {
				alertaEJB.excluirAlerta(alerta);
			} catch (BusinessException e) {
				UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
			}			
		} else {
			UtilsNLS.showMessage(UtilsNLS.MSG_PROP_GERAL, "mensagemIndefinida");
		}
		alerta = new AlertaVO();
	}

	public List<TelefoneVO> getListaTelefone() {
		return listaTelefone;
	}

	public void setListaTelefone(List<TelefoneVO> listaTelefone) {
		this.listaTelefone = listaTelefone;
	}

	public List<AlertaVO> getListaAlerta() {
		return listaAlerta;
	}

	public void setListaAlerta(List<AlertaVO> listaAlerta) {
		this.listaAlerta = listaAlerta;
	}

	public TelefoneVO getTelefone() {
		return telefone;
	}

	public void setTelefone(TelefoneVO telefone) {
		this.telefone = telefone;
	}

	/**
	 * @return the alerta
	 */
	public AlertaVO getAlerta() {
		return alerta;
	}

	/**
	 * @param alerta the alerta to set
	 */
	public void setAlerta(AlertaVO alerta) {
		this.alerta = alerta;
	}

	/**
	 * @return the idAlerta
	 */
	public Long getIdAlerta() {
		return idAlerta;
	}

	/**
	 * @param idAlerta the idAlerta to set
	 */
	public void setIdAlerta(Long idAlerta) {
		this.idAlerta = idAlerta;
	}

	/**
	 * @return the idTelefone
	 */
	public Long getIdTelefone() {
		return idTelefone;
	}

	/**
	 * @param idTelefone the idTelefone to set
	 */
	public void setIdTelefone(Long idTelefone) {
		this.idTelefone = idTelefone;
	}

	/**
	 * @return the tipoAlerta
	 */
	public TipoAlertaEnum getTipoAlerta() {
		return tipoAlerta;
	}

	/**
	 * @param tipoAlerta the tipoAlerta to set
	 */
	public void setTipoAlerta(TipoAlertaEnum tipoAlerta) {
		this.tipoAlerta = tipoAlerta;
	}
	
	
}
